10 REM********************************************************
20 REM
30 REM           DRILL PERIOD
40 REM            VERSION 1.0 11/26/79
50 REM            TERRY DETTMAN, KIRKLAND WASH.
60 REM
70 REM*********************************************************
80 CLEAR 2*MEM/3:DEFINTA-Z:MX=50:DIM A$(MX,2),ANS(MX,3):CMD"T"
90 STAR$=STRING$(63,42):S1$=STRING$(31,42):
    F1$="    ### WRONG OUT OF ### ":
    F2$="    SCORE: ###% ":
    F3$="%"+STRING$(28,32)+"%  %"+STRING$(28,32)+"%"
100 F4$="QUESTION ### OF ###"
110 TITLE$="DRILL PERIOD":GOSUB500
120 PRINT:PRINT
130 PRINTTAB(10)"1.   ENTER OR EDIT A DRILL"
140 PRINTTAB(10)"2.   SAVE A DRILL TO DISK"
150 PRINTTAB(10)"3.   INPUT A DRILL FROM DISK"
160 PRINTTAB(10)"4.   RUN A DRILL"
170 PRINT`896,"SELECTION: ";:GOSUB420
180 IF (C<1) OR (C>4) THEN PRINT@896,STRING$(60,32);:GOTO170
190 ON C GOSUB 1000,2000,2500,3000
200 GOTO 110
210 END
300 REM - - - - - - - - - - SCORING - - - - - - - - - - - - -
310 W=0:R=0
320 FORI=1TON:W=W+ANS(I,1):R=R+ANS(I,2):NEXTI
330 SC=(R/(R+W))*100+0.5
340 REUTRN
350 REM- - - - - - - - - INKEY$ ROUTINE - - - - - - - - - - - -
360 IN$=""
370 C$=INKEY$:IFC$=""THEN 370
380 IF ASC(C$)=13 THEN RETURN
          ELSE IF ASC(C$)=8 THEN 410
390 IF ASC(C$) <32 OR ASC(C$) >127 THEN 370
400 IN$=IN$+C$:PRINTC$;:GOTO370
410 IF LEN(IN$)<1 THEN370 ELSE IN$=LEFT$(IN$,LEN(IN$)-1): PRINTC$;:GOTO370
420 REM - - - - - - - SINGLE KEY NUMBER INPUT - - - - - - - - -
430 C$=INKEY$: IF C$="" THEN 430 ELSE C=VAL(C$): PRINTC$;:RETURN
440 REM - - - - - - - - SKIP A TAPE FILE - - - - - - - - - - - 
450 FLAG = 0
460 FOR I=1 TO N: INPUT #-1,Z1$, Z2$
470 IF INKEY$="Q" THEN FLAG=1: RETURN
480 NEXT I
490 RETURN
500 REM - - - - - - - - - HEADING TYPE I - - - - - - - - - - - 
510 CLS:PRINT STAR$;CHR$(13);TAB(20) TITLE$; CHR$(13);S1$;
        STRING$(2,13): RETURN
520 REM - - - - - - - - HEADING TYPE II - - - - - - - - - - -
530 CLS:PRINTCHR$(23);S1$;CHR$(13);TAB(10)TITLE$;CHR$(13);S1$;
        STRING$(2,13):RETURN
540 REM - - - - - - - -SINGLE KEY Y/N - - - - - - - - - - - - -
550 C$=INKEY$: IF (C$="N") OR (C$="Y") THEN PRINT C$: RETURN ELSE550
560 REM - - - - - - - -CASSETTE READY?" - - - - - - - - - - - -
570 GOSUB 500
580 PRINT "CHECK YOUR RECORDER"
590 PRINT TAB(5) "IS THE VOLUME CONTROL CORRECT?"
600 PRINT TAB(5) "IS IT PLUGGED IN?"
610 PRINT TAB(5) "IS THE TAPE POSITIONED CORRECTLY?"
620 PRINT TAB(5) "ARE THE RIGHT CONTROL KEYS PRESSED?"
630 PRINT@ 896   "PRESS ANY KEY WHEN THE ANSWER TO ALL THE QUESTIONS IS YES"
640 IF INKEY$="" THEN 640 ELSE RETURN
650 REM - - - - - - - - -SELECT QUESTION - - - - - - - - - - -
660 I=RND(N): IF (ANS(I,1)+ ANS (I,2))>5 THEN 580
670 IF(RND(150)/100)>(ANS(I,1)/ANS(I,2)) THEN 660
680 IF (MIX=1) THEN J1 =RND(2): J2=INT((1/J1)+1) ELSE J1 =1:J2=2
690 RETURN
700 REM - - - - - - - - - - DELAY LOOP - - - - - - - - - - - -
710 FOR TM=1 TO 300: NEXT TM: RETURN
720 REM - - - - - - - - - - INITIALIZE THE ANSWERS - - - - - - 
730 CR=0: FORI=1 TO N: ANS(I,1)=1: ANS(I,2)=1: NEXTI
              :RETURN
740 REM - - - - - - - - - - PREPARE FOR SCORES - - - - - - - - 
750 FOR I=1TON: ANS(I,1)=ANS(I,1)-1:ANS(I,2)=ANS(I,2)-1:NEXTI :
         RETURN
1000 REM - - - - - - - - -ENTER OR EDIT A DRILL - - - - - - - -
1010 TITLE$="ENTER OR EDIT":GOSUB500
      :IF H$<>"" THEN PRINT"THE CURRENT TITLE IS: ";H$
1020 PRINT TAB(5)"TITLE FOR THE EXERCISE: ";:GOSUB350:A$=IN$
1030 IF A$<>"" TH;EN H$=A$
1040 FOR I=1 TO MX
1050 GOSUB 500
1060 PRINT TAB(5)"PRESS ENTER TO KEEP THE SAME KEYWORD"
1070 PRINT TAB(5)"OR RESPONSE":PRINT:PRINT
1080 A$="":IFA$(I,1)<>""THEN PRINT"PRESENT KEYWORD IS: ";A$(I,1)
1090 PRINT"ENTER KEYWORD FOR DRILL OR END: ";:GOSUB 350:A$=IN$
      :PRINT
1100 IF A$<>""THEN A$(I,1)=A$
1110 IF A$(I,1)="END" THEN 1160
1120 A$="":IFA$(I,2)<>""THEN PRINT"PRESENT RESPONSE IS: ";A$(I,2)
1130 PRINT"ENTER CORRECT RESPONSE: ";:GOSUB 350:A$=IN$:PRINT
1140 IF A$<>"" THEN A$(I,2)=A$
1150 NEXT I
1160 IF A$(I,1)="END" THEN I=I-1
1170 N=I:RETURN
2000 REM - - - - - - - - - SAVE A DRILL TO TAPE - - - - - - - -
2010 TITLE$="SAVE TO TAPE":GOSUB560:GOSUB500
2020 PRINT#-1,CHR$(34)+H$+CHR$(34);",";N
     :PRINT"TITLE: ";H$;" QUESTIONS: ";N
2030 FOR I=1 TO N
2040 PRINT#-1,CHR$(34);A$(I,1);CHR$(34);",";CHR$(34);A$(I,2);
        CHR$(34):PRINTUSING F3$; A$(I,1); A$(I,2)
2050 NEXT I
2060 GOSUB 700: RETURN
2500 REM - - - - - - - - -INPUT A DRILL FROM TAPE - - - - - -
2510 TITLE$="INPUT A DRILL": GOSUB 500
2520 PRINTTAB(5) "ENTER THE TITLE OF THE DRILL YOU WANT"
2530 PRINTTAB(5) "AND THE PROGRAM WILL SEARCH FOR IT"
2540 PRINTTAB(5) "IF YOU JUST WANT THE NEXT DRILL ON TAPE"
2550 PRINTTAB(5) "THEN JUST PRESS ENTER"
2560 PRINT:PRINTTAB(5)"TITLE: ";:GOSUB 350: A$=IN$
     :PRINT:PRINTTAB(5)"A TAPE READ CAN BE ABORTED BY PRESSING"
     :PRINTTAB(5)"'Q' WHILE SKIPPING A FILE": GOSUB 700:GOSUB700
2570 GOSUB 560: GOSUB 500
2580 INPUT#-1,H$,N: PRINT"TITLE: ";H$;"  QUESTIONS: ";N
2590 IF(A$<> "") THEN IF A$<> H$ THEN
              GOSUB 440: IF FLAG=0 THEN 2580 ELSE RETURN
